﻿using System;
using System.Collections.Generic;
using System.Text;

namespace Exec
{
    public delegate bool Command(Transaction tn);

    // 명령어 테이블
    public class Comm
    {
        private static Symbol<Command> comm_t
            = new Symbol<Command>();

        // 명령어 실행
        public static bool Execute(Transaction tn)
        {
            Command comm;

            comm = comm_t.Get(tn.GetPre(), tn.GetCenter());

            // 해당 명령어가 없는 경우
            if(comm == null)
            {
                return NonComm();
            }

            //실행
            return comm(tn);
        }


        // 명령어 추가
        public static void Add(IPlugIn p, string c, Command comm)
        {
            comm_t.Set(p.GetPrefix(), c, comm);
        }

        // 명령어 제거
        public static void Remove(IPlugIn p, string c)
        {
            if (!comm_t.Remove(p.GetPrefix(), c))
            {
                NonComm();
            }
        }

        // 명령어 없음
        private static bool NonComm()
        {
            Console.WriteLine("해당 명령어가 없습니다.");
            return false;
        }

        public static void PrintCommand()
        {
            Console.WriteLine("Plugin_Command");
            comm_t.Print();
        }
    }
}
